package com.example.springbootcaffeinedemo.common;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.github.benmanes.caffeine.cache.LoadingCache;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Created by IntelliJ IDEA2022.3.2
 * @Author: Tenghw
 * @Date: 2023/04/17  19:19
 * @Description: 缓存添加策略之自己动加载
 */
public class CaffeineCacheAddPolicy2 {

    private static Object createObject(String key){
        return "hello caffeine 2023";
    }
    public static void main(String[] args) {
        // 1、初始化缓存，设置10分钟的写过期时间；缓存最大个数为100
        LoadingCache<String, Object> cache = Caffeine.newBuilder()
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .maximumSize(100)
                .build(CaffeineCacheAddPolicy2::createObject);
        String key="dragon";
        // 2、查找缓存，如果缓存不存在则使用CaffeineCacheAddPolicy2::createObject生成缓存元素；如果无法生成则返回null
        Object value = cache.get(key);
        System.out.println("2返回key对应的value：" +value);

        // 3、批量查找缓存，如果缓存不存在则生成缓存元素
        List<String> keys = new ArrayList<>();
        keys.add("dragon1");
        keys.add("dragon2");
        Map<String, Object> obejctMap = cache.getAll(keys);
        System.out.println("3批量查找缓存：" +obejctMap);
    }
}
